
package com.jf.cloud.user.service;

import com.jf.cloud.api.payment.vo.ShopAccountDetailVO;
import com.jf.cloud.api.user.dto.FinanceDetailDTO;
import com.jf.cloud.api.user.vo.FinanceDetailExcelVO;
import com.jf.cloud.api.user.vo.FinanceDetailVO;
import com.jf.cloud.api.user.bo.BalanceRefundBO;
import com.jf.cloud.api.user.vo.UserPayInfoVO;
import com.jf.cloud.common.database.dto.PageDTO;
import com.jf.cloud.common.database.vo.PageVO;
import com.jf.cloud.user.model.UserBalanceLog;
import com.jf.cloud.user.vo.UserBalanceLogVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 余额记录
 *
 * @author zz
 * @date 2021-04-27 15:51:36
 */
public interface UserBalanceLogService {

    /**
     * 分页获取余额记录列表
     * @param pageDTO 分页参数
     * @return 余额记录列表分页数据
     */
    PageVO<UserBalanceLog> page(PageDTO pageDTO);

    /**
     * 根据余额记录id获取余额记录
     *
     * @param balanceLogId 余额记录id
     * @return 余额记录
     */
    UserBalanceLog getByBalanceLogId(Long balanceLogId);

    /**
     * 保存余额记录
     * @param userBalanceLog 余额记录
     */
    void save(UserBalanceLog userBalanceLog);

    /**
     * 更新余额记录
     * @param userBalanceLog 余额记录
     */
    void update(UserBalanceLog userBalanceLog);

    /**
     * 根据余额记录id删除余额记录
     * @param balanceLogId 余额记录id
     */
    void deleteById(Long balanceLogId);
    /**
     * 分页查询某个用户的余额明细
     * @param pageDTO
     * @param userId
     * @return
     */
    PageVO<UserBalanceLogVO> getPageByUserId(PageDTO pageDTO, Long userId);

    /**
     * 删除某个用户的余额明细记录
     *
     * @param userId
     * @return
     */
    void deleteByUserId(@Param("userId") Long userId);

    /**
     * 批量保存用户余额日志
     * @param userRechargeLogs
     * @return 受影响行数
     */
    Long saveBatch(List<UserBalanceLog> userRechargeLogs);

    /**
     * 通过支付单号获取余额记录
     *
     * @param payId 支付单号
     * @return 余额记录
     */
    UserBalanceLog getByPayId(Long payId);

    /**
     * 扣减余额，并将余额记录的支付状态变为已支付
     * @param payId 支付单号
     * @param userBalanceLog 余额记录
     */
    void updateToOrderPaySuccess(Long payId, UserBalanceLog userBalanceLog);

    /**
     * 执行退款
     * @param balanceRefundBO 退款参数
     */
    void doRefund(BalanceRefundBO balanceRefundBO);

    /**
     * 分页获取用户余额充值财务详情
     * @param pageDTO
     * @param financeDetailDTO
     * @return
     */
    PageVO<FinanceDetailVO> pageFinanceDetail(PageDTO pageDTO, FinanceDetailDTO financeDetailDTO);

    /**
     * 分页获取用户余额充值财务详情
     * @param pageDTO
     * @param financeDetailDTO
     * @return
     */
    PageVO<FinanceDetailVO> pageFinanceDetailByQrCode(PageDTO pageDTO, FinanceDetailDTO financeDetailDTO);

    /**
     * 获取用户余额充值财务详情
     * @param financeDetailDTO
     * @return
     */
    List<FinanceDetailExcelVO> listFinanceDetail(FinanceDetailDTO financeDetailDTO);

    /**
     * 获取平台财务信息
     * @param startTime
     * @param endTime
     * @return
     */
    ShopAccountDetailVO getPlatformAccountDetail(Date startTime, Date endTime);

    /**
     * 获取用户充值，购买会员财务信息
     * @param startTime
     * @param endTime
     * @return
     */
    List<UserPayInfoVO> listPayInfoVO(Date startTime, Date endTime);
}
